SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE  PROCEDURE [dbo].[paChequearRectificacionDeLicenciaBK29072008]
-- <DESCRIPCION> Realiza el chequeo de concecion de una licencia.
-- <CONSIDERACIONES ESPECIALES> Licencias Extraordinarias, Licencias Historicas, Licencias Actuales.
-- <TABLAS> tb_ServiciosAgentes, tb_SubServiciosAgentes, tb_ColaDeMovimientos, tb_PlazasDeMovimiento, tb_Licencias, tb_Plazas
-- <PROCEDIMIENTOS> spDIFDiasHabiles, spAntiguedadAgenteHab, spAntiguedadAgente, paChequearIncompatibilidadHoraria
-- <ACTUALIZACIONES> 05 - 04 - 2006 por OTERO, Javier (Se agrega el control de Incompatibilidad Horaria)
-- <ACTUALIZACIONES> 12 - 05 - 2006 por SANES, Jorge  (Arreglar error en Control de Licencia en el Decenio error en IF)
-- <ACTUALIZACIONES> 28 - 06 - 2006 por OTERO, Javier (Controles por ExtraSistema)
-- <ACTUALIZACIONES> 17 - 07 - 2006 por SANES, Jorge (Se quito el Control de Codigo de Enfermedad)
-- <ACTUALIZACIONES> 04 - 09 - 2006 por FIORUCCI, Adriana y SANES, Jorge. (En control de Intermedio Obligatorio se cambio signo > por <)
-- <ACTUALIZACIONES> 19 - 10 - 2006 por OTERO, Javier. (Se agrega el control de Antiguedad Maxima y Licencias Relacionadas)

---- ACTUALIZACION EN DB
--12/04/2006 - SANES, Jorge
--12/05/2006 - SANES, Jorge
--17/05/2006 - SANES, Jorge

@idCola INT,
@Diagnostico VARCHAR(1000) OUTPUT,
@Estado INT OUTPUT
AS

SET DATEFORMAT DMY
SET NOCOUNT ON
DECLARE @Warning VARCHAR(1000)
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @SitRev INT
DECLARE @Agente INT
DECLARE @SubServicio INT
DECLARE @Servicio INT
DECLARE @Licencia INT
DECLARE @error INT
DECLARE @DuracionMax INT
DECLARE @dias INT
DECLARE @RequiereEnfermedad VARCHAR(1)
DECLARE @UTDurMax INT
DECLARE @UTAntMin INT
DECLARE @AntMin INT
DECLARE @UTCAntMin INT
DECLARE @IntermedioObligatorio INT
DECLARE @UTIntermedioObligatorio INT
DECLARE @Limite1 INT
DECLARE @Limite2 INT
DECLARE @UTLimite1 INT
DECLARE @UTLimite2 INT
DECLARE @UTCLimite1 INT
DECLARE @UTCLimite2 INT
DECLARE @CantMax INT
DECLARE @UTCCantMax INT
DECLARE @UTC VARCHAR(10)
DECLARE @cod INT
DECLARE @SPEspecIFico VARCHAR(50)
DECLARE @FAlta DATETIME
DECLARE @SitLabAsociada INT
DECLARE @CUPOFDestino INT
DECLARE @FechaTermino DATETIME
DECLARE @FechaAEvaluar DATETIME
DECLARE @DuracionMinima INT
DECLARE @UTDuracionMinima INT
DECLARE @Aplicacion INT
DECLARE @Turno INT
DECLARE @NoControlarAntiguedad BIT
DECLARE @Enfermedad INT
DECLARE @Modo INT
DECLARE @FBaja DATETIME
DECLARE @LicenciaAnterior INT
DECLARE @CuentaIncompatibilidadAnterior VARCHAR(1)
DECLARE @CuentaIncompatibilidadNueva VARCHAR(1)
DECLARE @Deshacer VARCHAR(1)
DECLARE @AntiguedadMaxima INT
DECLARE @UTAntiguedadMaxima INT
DECLARE @UTCAntiguedadMAxima INT
DECLARE @DiasAcumulados INT 
DECLARE @LicenciaRelacionada INT

SELECT @Diagnostico = ''
SELECT @error = 0
SELECT @cod = 0
SELECT @DiasAcumulados = 0

SELECT @Fecha1 = Fecha1, @Fecha2 = Fecha2, @Agente = Agente, @Licencia = Licencia, @SitRev = SitRev,  @FechaTermino = FechaTermino 
FROM tb_ColaDeMovimientos WHERE idCola = @idCola

SELECT @SubServicio = servicio FROM tb_PlazasDeMovimiento WHERE idCola = @idCola
SELECT @Servicio = ServicioAgente, @FAlta = FechaAlta, @FBaja = FechaBaja, @LicenciaAnterior = Licencia  FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio
SELECT @SitRev = SituacionRevista FROM tb_ServiciosAgentes WHERE idServicioagente = @Servicio
SELECT @CUPOFDestino = PlazaDestino, @Enfermedad = Enfermedad, @Deshacer = Borrar FROM tb_PlazasDeMovimiento WHERE idCola = @idCola

SELECT @Modo = Modo FROM tb_Usuarios WHERE NTUser = SYSTEM_USER

SELECT @Turno = turno from tb_Plazas, tb_SubServiciosAgentes where idPlaza = Plaza and idSubServicio = @SubServicio

-- Extraigo los atributos de la licencia
SELECT @DuracionMax = DuracionMaxima, @RequiereEnfermedad = RequiereRegEnfermedad,
@UTDurMax = UTDuracionMaxima, @UTAntMin = UTAntiguedadMinima, @AntMin = AntiguedadMinima, @UTCAntMin = UTCAntiguedadMinima,
@IntermedioObligatorio = IntermedioObligatorio, @UTIntermedioObligatorio = UTIntermOblig, @Limite1 = LimiteDias1, @UTLimite1 = UTLimiteDias1,
@UTCLimite1 = UTCLimiteDias1,  @Limite2 = LimiteDias2, @UTLimite2 = UTLimiteDias2, @UTCLimite2 = UTCLimiteDias2, @CantMax = CantidadMaxPedidos,
@UTCCantMax = UTCCantidadMaxPed, @SPEspecIFico = RestriccionEspecIFica, @SitLabAsociada = SituacionLaboralAsociada,
@DuracionMinima = DuracionMinima, @UTDuracionMinima = UTDuracionMinima, @Aplicacion = Aplicacion,
@AntiguedadMaxima = AntiguedadMaxima, @UTAntiguedadMaxima = UTAntiguedadMaxima, @UTCAntiguedadMaxima = UTCAntiguedadMaxima
FROM tb_licencias WHERE idLicencia = @Licencia

-- Veo si la licencia se tiene que INSERTar abierta. Si es asi tomo para evaluar la fecha prevista de termino.
--OJO si no pone la fecha fin de la licencia toma el max de dias permitidos por la licencia 
--ver pachequeariniciodelicencia que pone Getdate()
-- Este codigo era anterios al 20-11-2007 - hable con Orlando y a pesar de que consideramos esta mal, la fecha de baja para las licencias abiertas la evaluamos como en el Inicio de Licencia
/*
IF @Fecha2 is not null
	SELECT @FechaAEvaluar = @Fecha2
ELSE
IF @Fecha2 is null and @FechaTermino is not null
	SELECT @FechaAEvaluar = @FechaTermino
ELSE
IF @FechaTermino is null
	IF @DuracionMax is not null
		SELECT @FechaAEvaluar = dateadd(day, @DuracionMax, @Fecha1)
ELSE

	SELECT  @FechaAEvaluar = null
*/

-- Codigo nuevo al 20-11-2007 - se tomo del paChequearIniciodeLicencia
-- Veo si la licencia se tiene que insertar abierta. Si es asi tomo para evaluar la fecha prevista de termino.
IF @Fecha2 is NOT NULL
	SELECT @FechaAEvaluar = @Fecha2
ELSE
	IF @Fecha2 is NULL AND @FechaTermino is NOT NULL
		SELECT @FechaAEvaluar = @FechaTermino
	ELSE
		SELECT @FechaAEvaluar = GETDATE()


-- Control agregado el 03 - 04 - 2006 Para control de Incompatibilidad Horaria.
SELECT @CuentaIncompatibilidadAnterior = CuentaIncompatibilidad FROM tb_Licencias WHERE IdLicencia = @LicenciaAnterior
SELECT @CuentaIncompatibilidadNueva = CuentaIncompatibilidad FROM tb_Licencias WHERE IdLicencia = @Licencia

--Si la licencia a Rectificar NO CUENTA INCOMPATIBILIDAD y Tiene Fecha de Baja.
--   O se deshace una licencia que NO CUENTA INCOMPATIBILIDAD.
IF @Deshacer IS NULL
	SELECT @Deshacer = 'N'

IF (@CuentaIncompatibilidadNueva = 'N' AND @Fecha2 IS NOT NULL)
	OR (@CuentaIncompatibilidadNueva = 'N' AND @Deshacer = 'S')
BEGIN
	DECLARE @HorasMediaIniciales INT, @HorasTerciariasIniciales INT, @HorasCargoIniciales INT
	DECLARE @EsIncompatible BIT, @Horas INT, @HorasTerciarias INT
	DECLARE @FechaHasta DATETIME
	DECLARE @IdServicioExtraSistema INT
	
	SELECT @HorasMediaIniciales = 0, @HorasTerciariasIniciales = 0, @HorasCargoIniciales = 0
	SELECT @IdServicioExtraSistema = NULL

	IF (@Fecha2 IS NULL)
		SELECT @FechaHasta = @Fecha1
	ELSE
		SELECT @FechaHasta = @Fecha2


	-- Si la causa de alta del Servicio no es por Articulo 131 o 125c.
	IF NOT EXISTS(SELECT top 1 IdServicioAgente FROM tb_ServiciosAgentes WHERE IdServicioAgente = @Servicio AND CausaAlta IN (12, 18))
		SELECT @HorasMediaIniciales = CASE WHEN C.RegimenSalarial = 13 AND CargoSalarial <> 4001 THEN S.Horas ELSE 0 END,
			 @HorasTerciariasIniciales = CASE WHEN C.RegimenSalarial = 13 AND S.CargoSalarial = 4001 THEN S.Horas 
							   WHEN C.RegimenSalarial = 12 AND C.Escalafon = 24 THEN C.EquivHoraria ELSE 0 END,
			 @HorasCargoIniciales = CASE WHEN C.RegimenSalarial = 12 AND C.Escalafon <> 24 THEN C.EquivHoraria ELSE 0 END
		FROM tb_ServiciosAgentes S INNER JOIN tb_CargosSalariales C ON C.IdCargo = S.CargoSalarial
		WHERE IdServicioAgente = @Servicio

	-- Se llama al procedimiento de chequeo de Incompatibilidad
	IF @Fecha1 > @FAlta
		EXEC paChequearIncompatibilidadHoraria @Agente, @HorasMediaIniciales, @HorasTerciariasIniciales, @HorasCargoIniciales, @Fecha1, @FechaHasta, @EsIncompatible OUTPUT, @Horas OUTPUT, @HorasTerciarias OUTPUT, @IdServicioExtraSistema
	
	IF @EsIncompatible = 1
	BEGIN
		SELECT @Cod = 3,@Diagnostico= '* Rectificando  la licencia el Agente entraria en Incompatibilidad Horaria ( Horas Totales: '+CONVERT(VARCHAR, @Horas)+' Horas Terciarias: ' + CONVERT(VARCHAR, @HorasTerciarias) + ')'
		GOTO SALIR
	END
	ELSE
	BEGIN

		IF @Fecha2 IS NOT NULL AND @Fecha2 < @FBaja
 		       BEGIN 
			-- Cambio 18-09-2007
			DECLARE @FechaFinReal DATETIME
			SET @FechaFinReal = DATEADD(DD,1,@Fecha2)
			--EXEC paChequearIncompatibilidadHoraria @Agente, @HorasMediaIniciales, @HorasTerciariasIniciales, @HorasCargoIniciales, @Fecha2, @FechaHasta, @EsIncompatible OUTPUT, @Horas OUTPUT, @HorasTerciarias OUTPUT, @IdServicioExtraSistema
			EXEC paChequearIncompatibilidadHoraria @Agente, @HorasMediaIniciales, @HorasTerciariasIniciales, @HorasCargoIniciales, @FechaFinReal, @FechaHasta, @EsIncompatible OUTPUT, @Horas OUTPUT, @HorasTerciarias OUTPUT, @IdServicioExtraSistema
		       END 
	
		IF @EsIncompatible = 1
		BEGIN
			SELECT @Cod = 3,@Diagnostico= '* Rectificando  la licencia el Agente entraria en Incompatibilidad Horaria ( Horas Totales: '+CONVERT(VARCHAR, @Horas)+' Horas Terciarias: ' + CONVERT(VARCHAR, @HorasTerciarias) + ')'
			GOTO SALIR
		END
	END
END


-- VerIFico si la fecha de alta es menor a la fecha de baja
IF @fecha2 is not null
	BEGIN
	IF @fecha1 > @fecha2
		BEGIN
		prINT 'Fecha Alta > Fecha Baja'
		SELECT @cod = 3,@Diagnostico='* Error! La fecha de alta en la que se quiere INSERTar la licencia es mayor que la fecha de baja!'
		goto salir
		END
	END

-- LAS ESCUELAS NO PUEDEN PASAR LICENCIAS EXTRAPRDINARAS
IF @Modo = 2 AND @Licencia IN (SELECT IdLicencia FROM tb_Licencias WHERE SituacionLaboralAsociada = 1)
BEGIN
	SELECT @Cod = 3, @Diagnostico = 'Error! El usuario no puede informar Licencias Extraordinarias'
	GOTO salir
END

-- VerIFico si la licencia es tiene sit lab LE.
IF @SitLabAsociada = 1 and @CupofDestino is null	BEGIN
	prINT 'Error de cupof destino'
	SELECT @Cod = 3,@Diagnostico = '*' + 'Error! Esta licencia requiere un CUPOF destino debido a que la situacion laboral es LE!'
	goto salir
	END

IF @SitLabAsociada = 1 and @CUPOFDestino is not null and exists(SELECT * from tb_SubServiciosAgentes s where plaza = @CUPOFdestino and
	((FechaAlta <= @Fecha1 and baja = 'N') or (baja = 'S' and FechaAlta <= @Fecha1 and FechaBaja >= @Fecha1)))
	BEGIN
	prINT 'Error de cupof destino'
	SELECT @Cod = 1,@Diagnostico = '*' + 'La Plaza destino seleccionada ('+(SELECT Cupof from tb_Plazas where idPlaza = @CupofDestino)+' esta ocupada por otro agente!'
	goto salir
	END

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------ ESTO SE QUITO POR SOLICITUD DE ROBERTO, YA QUE LAS ESCUELAS NO DEBEN CARGAR EL CODIGO DE ENFERMEDAD
-- VerIFico si la licencia requiere un codigo de enfermedad y si fue suministrado
--IF ((@RequiereEnfermedad = 'S') and (SELECT Enfermedad from tb_PlazasDeMovimiento where idCola = @idCola) is null)
--  BEGIN
--	prINT 'Test de Enfermedad'
--	prINT 'Error de enfermedad'
--	SELECT @Cod = 1,@Diagnostico = '*' + 'Esta licencia requiere un codigo de enfermedad que no ha sido suministrado'
--	goto salir
--  END
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-- VerIFica la duracion maxima de la licencia. Si no se especIFica la fecha de baja se agrega un mensaje de alerta
-- Miro si el sub servicio anterior tambien tenia la misma licencia...
DECLARE @F1 DATETIME
SELECT @dias = 0
IF (@FechaAEvaluar is not null)
	BEGIN
	IF (SELECT Licencia from tb_SubServiciosAgentes where idSubServicio = @SubServicio) = @Licencia
		BEGIN
		IF (@UTDurMax = 1)
			BEGIN
			SELECT @F1 = FechaAlta from tb_SubServiciosagentes where idSubServicio = @SubServicio
			SELECT @dias = datedIFf(day, @F1, @Fecha1)
			END
		ELSE
			BEGIN
			SELECT @F1 = FechaAlta from tb_SubServiciosAgentes where idSubServicio = @SubServicio
			exec @dias = spDIFDiasHabiles @Fecha1, @FechaAEvaluar
			END
		END		
	IF (@UTDurMax = 1)
		SELECT @dias = @dias+datedIFf(day, @Fecha1, @FechaAEvaluar)
	ELSE
		BEGIN
		DECLARE @dias2 INT
		exec @dias2 = spDIFDiasHabiles @Fecha1, @FechaaEvaluar
		SELECT @Dias = @dias + @dias2
		END

	IF @dias > @DuracionMax
		BEGIN
		prINT 'Error de total de dias'
		SELECT @cod = 1,@Diagnostico= '*' + 'Se supera el total de dias ('+convert(VARCHAR, @duracionmax)+') permitidos por esta licencia'
		goto salir		END
	END
ELSE
	SELECT @Warning = 'No se especIFico la fecha de baja de la Licencia. La fecha de plazo maxima es '+convert(VARCHAR,dateadd(day, @DuracionMax, @Fecha1))
	
--VerIFico la duracion minima de la licencia
SELECT @dias = 0
IF (@FechaAEvaluar is not null) and (@DuracionMinima is not null)
	BEGIN
	IF (SELECT Licencia from tb_SubServiciosAgentes where idSubServicio = @SubServicio) = @Licencia
		BEGIN
		IF (@UTDuracionMinima = 1)
			BEGIN
			SELECT @F1 = FechaAlta from tb_SubServicios where idSubServicio = @SubServicio
			SELECT @dias = datedIFf(day, @F1, @Fecha1)
			END
		ELSE
			BEGIN
			SELECT @F1 = FechaAlta from tb_SubServicios where idSubServicio = @SubServicio
			exec @dias = spDIFDiasHabiles @Fecha1, @FechaAEvaluar
			END
		END		
	IF (@UTDuracionMinima = 1)
		SELECT @dias = @dias+datedIFf(day, @Fecha1, @FechaAEvaluar)
	ELSE
		BEGIN
		exec @dias2 = spDIFDiasHabiles @Fecha1, @FechaaEvaluar
		SELECT @Dias = @dias + @dias2
		END

	IF @dias < @duracionminima
		BEGIN
		prINT 'Error de total de dias'
		SELECT @cod = 1,@Diagnostico= '*' + 'Esta licencia necesita como mínimo ('+convert(VARCHAR, @duracionminima)+') dias y se tomaría '+convert(VARCHAR, @dias)
		goto salir		
		END
	END
ELSE
	SELECT @Warning = 'No se especificó la fecha de baja de la Licencia. La fecha de plazo maxima es '+convert(VARCHAR,dateadd(day, @DuracionMax, @Fecha1))


-- VerIFico la antiguedad minima que permite la licencia teniENDo en cuenta la UT y la UTC
DECLARE @antiguedad INT
DECLARE @fecha DATETIME
-- En el Año
IF @UTCAntMin = 1
	BEGIN
	SELECT @fecha = cast('1/1/'+cast(year(@Fecha1) as VARCHAR(4)) as DATETIME)
	END
-- En el año de servicio?
IF @UTCAntMin = 2
	BEGIN
	 prINT 'En el año de servicio!'
	--SELECT @fecha = FechaAlta from tb_ServiciosAgentes where idServicioAgente = @Servicio
	SELECT @fecha  = dateadd(day, -365, @Fecha1)
	END
-- en Total
IF @UTCAntMin = 6
	SELECT @fecha = min(FechaAlta) from tb_ServiciosAgentes where Agente = @Agente group by Agente
-- En el Decenio
IF @UTCAntMin = 5
	BEGIN
	SELECT @fecha='1/1/'+convert(VARCHAR,datepart(year,@Fecha1)-9)
	END
-- En el Bieño
IF @UTCAntMin = 4
	BEGIN
	SELECT @fecha = '1/1/'+convert(VARCHAR, year(@Fecha1)-1)
	END
-- En el mes calENDario
IF @UTCAntMin = 3
	BEGIN
	SELECT @fecha=convert(VARCHAR,datepart(month,@Fecha1))+'/1/'+convert(VARCHAR,datepart(year,@Fecha1))
	END
--Si la antiguedad se mide en dias Corridos
IF @UTAntMin  = 1
	BEGIN
	prINT 'Ejecuta procedimiento para dias corridos'
	EXEC spAntiguedadAgente @Agente, @fecha, @Fecha1, @antiguedad output
	END
ELSE
	EXEC spAntiguedadAgenteHab @Agente, @fecha, @Fecha1, @antiguedad output
prINT convert(VARCHAR, @licencia)
prINT 'AntMin: '+convert(VARCHAR,@antmin)+' Antiguedad: '+convert(VARCHAR,@antiguedad)

IF @AntMin > @Antiguedad AND ( (@Enfermedad IS NULL) OR (@Enfermedad IS NOT NULL AND @Enfermedad NOT IN (SELECT IdEnfermedad FROM tb_Enfermedades WHERE NoCuentaAntiguedadParaLicencia = 'S')))
BEGIN
	PRINT 'Error de antiguedad'
	SELECT @cod = 1,@Diagnostico ='*'+'El agente tiene '+convert(VARCHAR, @antiguedad)+' dias de servicio. Para gozar la licencia se necesitan mas de '+convert(VARCHAR, @AntMin)	
	GOTO SALIR
END


-- Cheque de Antiguedad Maxima. Agregado el 10-10-2006
IF @AntiguedadMaxima IS NOT NULL
BEGIN
	-- En el Año
	IF @UTCAntiguedadMaxima = 1
	BEGIN
		SELECT @fecha = CAST('01/01/'+CAST(YEAR(@Fecha1) AS VARCHAR(4)) AS DATETIME)
	END
	-- En el año de servicio?
	IF @UTCAntiguedadMaxima = 2
	BEGIN
		SELECT @fecha  = DATEADD(DAY, -365, @Fecha1)
	END
	-- en Total
	IF @UTCAntiguedadMaxima = 6
		SELECT @fecha = MIN(FechaAlta) FROM tb_ServiciosAgentes WHERE Agente = @Agente group by Agente
	-- En el Decenio
	IF @UTCAntiguedadMaxima = 5
	BEGIN
		SELECT @fecha='01/01/'+CONVERT(VARCHAR,DATEPART(YEAR,@Fecha1)-9)
	END
	-- En el Bieño
	IF @UTCAntiguedadMaxima = 4
	BEGIN
		SELECT @fecha = '01/01/'+CONVERT(VARCHAR, YEAR(@Fecha1)-1)
	END
	-- En el mes calENDario
	IF @UTCAntiguedadMaxima = 3
	BEGIN
		SELECT @fecha='01/'+CONVERT(VARCHAR,DATEPART(MONTH,@Fecha1))+CONVERT(VARCHAR,DATEPART(YEAR,@Fecha1))
	END
	--Si la antiguedad se mide en dias Corridos
	IF @UTAntiguedadMaxima  = 1
		EXEC spAntiguedadAgente @Agente, @fecha, @Fecha1, @antiguedad OUTPUT
	ELSE
		EXEC spAntiguedadAgenteHab @Agente, @fecha, @Fecha1, @antiguedad OUTPUT
	IF @AntiguedadMaxima < @Antiguedad AND ( (@Enfermedad IS NULL) OR (@Enfermedad IS NOT NULL AND @Enfermedad NOT IN (SELECT IdEnfermedad FROM tb_Enfermedades WHERE NoCuentaAntiguedadParaLicencia = 'S')))
	BEGIN
		SELECT @cod = 1, @Diagnostico ='*'+'El agente tiene '+CONVERT(VARCHAR, @antiguedad)+' dias de servicio. Para gozar la licencia se necesitan MENOS de '+CONVERT(VARCHAR, @AntiguedadMaxima)	
		GOTO SALIR
	END
END -- END Cheque Antiguedad Maxima

-- controlo la distancia minima entre licencias (Intermedio Obligatorio)
-- Si el subservicio anterior no esta dado de baja y es el mismo tipo de licencia?
DECLARE @MayorFB DATETIME
IF (@IntermedioObligatorio is not null) or (@IntermedioObligatorio > 0)
	BEGIN
	IF (SELECT FechaBaja from tb_SubServiciosAgentes where idsubServicio = @SubServicio) is null and (SELECT Licencia from tb_SubServiciosAgentes where idSubServicio = @SubServicio) = @Licencia
		BEGIN
		prINT 'Error de INTermedio obligatorio'
		SELECT @cod = 1,@Diagnostico = '*'+'El Agente tiene esa Licencia y sin baja!. No cumple con la cantidad de dias minima entre licencias'
		goto salir
		END
	ELSE
		BEGIN
		SELECT @MayorFB = max(ss.FechaBaja) from tb_SubServiciosAgentes ss, tb_ServiciosAgentes s where s.agente = @Agente and s.idServicioAgente = ss.servicioAgente and ss.Licencia = @Licencia
		IF @UTIntermedioObligatorio = 1
			SELECT @dias = datedIFf(day, @MayorFB, @Fecha1)
		ELSE
			exec @dias = spDIFDiasHabiles @MayorFB, @Fecha1
		IF @dias < @IntermedioObligatorio
			BEGIN
			prINT 'Error de INTermedio obligatorio 2'
			SELECT @cod = 1,@Diagnostico = '*'+'El Agente tuvo esa licencia el dia '+convert(VARCHAR, @MayorFB)+'. No cumple con la cantidad de dias minima entre licencias' 
			goto salir
			END
		END
	END

-- VerIFico el primer limite de dias
DECLARE @dias1 INT
IF (@Limite1 is not null) or (@Limite1 <> 9999) and (@FechaAEvaluar is not null)
-- Primero calculo la dIFerencia de la licencia que se quiere INSERTar
BEGIN
IF @UTLimite1 = 1
	SELECT @dias1 = datedIFf(day, @Fecha1, @FechaAEvaluar)+1
ELSE
	EXEC @dias1 = spDIFDiasHabiles @Fecha1, @FechaAEvaluar

--En el año
IF @UTCLimite1 = 1
	SELECT @fecha = '1/1/'+convert(VARCHAR, year(@Fecha1)), @UTC = ' año '

--En el año de servicio ==> ESTA PENDIENTE
IF @UTCLimite1 = 2
	prINT 'Esta pENDiente! (limite1)'

--En el mes calENDario
IF @UTCLimite1 = 3
	SELECT @fecha = '1/'+convert(VARCHAR, month(@Fecha1))+'/'+convert(VARCHAR, year(@Fecha1)), @UTC = ' mes '

-- En el bieño
IF @UTCLimite1 = 4
	SELECT @fecha = '1/1/'+convert(VARCHAR,year(@Fecha1)-1), @UTC = ' bieño '

-- En el decenio calENDario
--- Arreglado 12/05/2006
IF @UTCLimite1 = 5
	SELECT @fecha = '1/1/'+convert(VARCHAR,year(@Fecha1)-9), @UTC = ' decenio '

-- En el Total
IF @UTCLimite1 = 6
BEGIN
	SELECT @fecha = min(FechaAlta) from tb_ServiciosAgentes where Agente = @Agente
	SELECT @UTC = ' total '
END

IF @UTLimite1 = 1
	exec @dias = spDiasDeLicencias @Agente, @fecha, @fecha1, @licencia,'C', @Aplicacion, @Turno
ELSE
	exec @dias = spDiasDeLicencias @Agente, @fecha, @fecha1, @licencia,'H', @Aplicacion, @turno

--Si la licencia tiene licencias relacionadas del tipo SUMAR DIAS.
IF EXISTS(SELECT top 1  LicenciaRelacionada FROM tb_LicenciasRelacionadas WHERE Licencia = @Licencia AND TipoDeRelacion = 1 AND FechaDeBaja IS NULL)
BEGIN
	SELECT @DiasAcumulados = 0

	DECLARE crsLicenciasRelacionadas CURSOR FORWARD_ONLY  READ_ONLY FOR
	SELECT LicenciaRelacionada FROM tb_LicenciasRelacionadas WHERE Licencia = @Licencia AND TipoDeRelacion = 1 AND FechaDeBaja IS NULL

	OPEN crsLicenciasRelacionadas

	FETCH NEXT FROM crsLicenciasRelacionadas INTO @LicenciaRelacionada

	WHILE @@FETCH_STATUS = 0
	BEGIN
		IF @UTLimite1 = 1
			EXEC @DiasAcumulados = spDiasDeLicencias @Agente, @fecha, @fecha1, @LicenciaRelacionada,'C', @Aplicacion, @Turno
		ELSE
			EXEC @DiasAcumulados = spDiasDeLicencias @Agente, @fecha, @fecha1, @LicenciaRelacionada,'H', @Aplicacion, @Turno
	
		FETCH NEXT FROM crsLicenciasRelacionadas INTO @LicenciaRelacionada
	END

	CLOSE crsLicenciasRelacionadas
	DEALLOCATE crsLicenciasRelacionadas
END


SELECT @dias = @dias+@dias1+@DiasAcumulados
prINT 'Limite de dias1: '+convert(VARCHAR,  @dias)

IF @dias > @Limite1
	BEGIN
	prINT 'Error de dias de licencia'
	SELECT @cod = 1, @Diagnostico = 'Error! El agente se tomaría '+convert(VARCHAR, @dias)+' días en el último '+@UTC+'y no se puede tomar  mas de '+convert(VARCHAR,@Limite1)+' en el periodo'
	goto salir
	END 
END

-- VerIFico el segundo limite de dias

IF (@Limite2 is not null) or (@Limite2 <> 9999) and (@FechaAEvaluar is not null)
-- Primero calculo la dIFerencia de la licencia que se quiere INSERTar
BEGIN
IF @UTLimite2 = 1
	SELECT @dias1 = datedIFf(day, @Fecha1, @FechaAEvaluar)+1
ELSE
	exec @dias1 = spDIFDiasHabiles @Fecha1, @FechaAEvaluar

--En el año
IF @UTCLimite2 = 1
	SELECT @fecha = '1/1/'+convert(VARCHAR, year(@Fecha1)), @UTC = ' año '--En el año de servicio ==> ESTA PENDIENTE
IF @UTCLimite2 = 2
	prINT 'Esta pENDiente! (limiete 2)'

--En el mes calENDario
IF @UTCLimite2 = 3
	SELECT @fecha = '1/'+convert(VARCHAR, month(@Fecha1))+'/'+convert(VARCHAR, year(@Fecha1)), @UTC = ' mes '

-- En el bieño
IF @UTCLimite2 = 4
	SELECT @fecha = '1/1/'+convert(VARCHAR,year(@Fecha1)-1), @UTC = ' bieño '

-- En el decenio calENDario
IF @UTCLimite2 = 5
	SELECT @fecha = '1/1/'+convert(VARCHAR,year(@Fecha1)-9), @UTC = ' decenio '

-- En el Total
IF @UTCLimite2 = 6
	BEGIN
	SELECT @fecha = min(FechaAlta) from tb_ServiciosAgentes where Agente = @Agente
	SELECT @UTC = ' total '
	END

IF @UTLimite2 = 1
	exec @dias = spDiasDeLicencias @Agente, @fecha, @fecha2, @Licencia, 'C', @Aplicacion, @Turno
ELSE
	exec @dias = spDiasDeLicencias @Agente, @fecha, @fecha2, @licencia ,'H', @Aplicacion, @Turno

--Si la licencia tiene licencias relacionadas del tipo SUMAR DIAS.
SELECT @DiasAcumulados = 0
IF EXISTS(SELECT top 1 LicenciaRelacionada FROM tb_LicenciasRelacionadas WHERE Licencia = @Licencia AND TipoDeRelacion = 1 AND FechaDeBaja IS NULL)
BEGIN
	DECLARE crsLicenciasRelacionadas CURSOR FORWARD_ONLY  READ_ONLY FOR
	SELECT LicenciaRelacionada FROM tb_LicenciasRelacionadas WHERE Licencia = @Licencia AND TipoDeRelacion = 1 AND FechaDeBaja IS NULL

	OPEN crsLicenciasRelacionadas

	FETCH NEXT FROM crsLicenciasRelacionadas INTO @LicenciaRelacionada

	WHILE @@FETCH_STATUS = 0
	BEGIN
		IF @UTLimite1 = 1
			EXEC @DiasAcumulados = spDiasDeLicencias @Agente, @fecha, @fecha1, @LicenciaRelacionada,'C', @Aplicacion, @Turno
		ELSE
			EXEC @DiasAcumulados = spDiasDeLicencias @Agente, @fecha, @fecha1, @LicenciaRelacionada,'H', @Aplicacion, @Turno
	
		FETCH NEXT FROM crsLicenciasRelacionadas INTO @LicenciaRelacionada
	END

	CLOSE crsLicenciasRelacionadas
	DEALLOCATE crsLicenciasRelacionadas
END

SELECT @dias = @dias+@dias2 + @DiasAcumulados

IF @dias > @Limite2
	BEGIN
	prINT 'Error de dias de licencia 2'
	SELECT @cod = 1, @Diagnostico = '*Error! El agente se tomaría '+convert(VARCHAR, @dias)+' días en el último '+convert(VARCHAR,@UTC)+'y no se puede tomar  mas de '+convert(VARCHAR,@Limite2)+' en el periodo'
	goto salir
	END
END

-- VerIFico el limite de veces de pedido de licencia por UTC.
IF (@CantMax is not null) or (@CantMax > 0)
BEGIN
	DECLARE @count INT

	--En el año
	IF @UTCCantMax = 1
		SELECT @fecha = '1/1/'+convert(VARCHAR, year(@Fecha1)), @UTC = ' año '
	
	--En el año de servicio ==> ESTA PENDIENTE
	IF @UTCCantMax = 2
		prINT 'Esta pENDiente!'
	
	--En el mes calENDario
	IF @UTCCantMax = 3
		SELECT @fecha = '1/'+convert(VARCHAR, month(@Fecha1))+'/'+convert(VARCHAR, year(@Fecha1)), @UTC = ' mes '
	
	-- En el bieño
	IF @UTCCantMax = 4
		SELECT @fecha = '1/1/'+convert(VARCHAR,year(@Fecha1)-1), @UTC = ' bieño '
	
	-- En el decenio calENDario
	IF @UTCCantMax = 5
		SELECT @fecha = '1/1/'+convert(VARCHAR,year(@Fecha1)-9), @UTC = ' decenio '
	
	-- En el Total
	IF @UTCCantMax = 6
		BEGIN
		SELECT @fecha = min(FechaAlta) from tb_ServiciosAgentes where Agente = @Agente
		SELECT @UTC = ' total '
		END

	--OJO que esta mirando todas las licencias cargadas!! deberia ser para el Agente
	--ver paChequearIniciodeLicencia que mira segun la aplicación
	--SELECT @count = (SELECT count(*) from tb_SubServiciosAgentes where FechaAlta > @fecha and Licencia = @Licencia)+1
	
	-- Se agrego el 20-11-2007 
	IF @aplicacion = 1 
		SELECT @count = (SELECT count(*)+1 FROM tb_SubServiciosAgentes WHERE FechaAlta > @fecha AND Licencia = @Licencia AND ServicioAgente = @servicio)
	IF @aplicacion = 2
		SELECT @count = (SELECT count(*)+1 FROM tb_SubServiciosAgentes ss INNER JOIN tb_Plazas p on p.IdPlaza = ss.Plaza INNER JOIN tb_ServiciosAgentes s ON s.IdServicioAgente = ss.ServicioAgente WHERE ss.FechaAlta > @fecha AND ss.Licencia = @Licencia AND P.Turno = @turno AND s.Agente = @Agente)
	IF @aplicacion = 3 
		SELECT @count = (SELECT count(*)+1 FROM tb_SubServiciosAgentes ss INNER JOIN tb_ServiciosAgentes s ON s.IdServicioAgente = ss.ServicioAgente WHERE ss.FechaAlta > @fecha AND Licencia = @Licencia AND S.Agente = @agente)



	prINT 'CantidadPedida por esta licencia: '+convert(VARCHAR, @count)
	
	IF (@count > @CantMax)
	    BEGIN
		prINT 'Error de cantidad de licencias a a pedir'
		SELECT @cod = 1,@Diagnostico = 'Error! El agente se tomaria '+convert(VARCHAR, @count)+' veces esa licencia en el '+@UTC+'y no puede exeder los '+convert(VARCHAR,@CantMax)+' dias'
		GOTO salir
	   END
END


-- VerIFico  Si la Situacion de Revista es valida para esta licencia
prINT convert(VARCHAR, @sitrev)
IF @SitRev not in (SELECT idSituacionRevista from tb_SituacionesRevistaPermitidasPorLicencia where idLicencia = @Licencia)
	BEGIN
	prINT 'Error de situacion de revista'
	SELECT @cod = 1, @Diagnostico = '*'+'Error! La situacion de revista no es aceptada por este tipo de licencia!'
	--goto salir
	END


-- Se verIFica que no se superponga con otro sub servicio anterior dentro del servicio.
-- Si la licencia a INSERTar esta dentro de un subservicio se toma como correcta


DECLARE @SitLab INT

IF EXISTS (SELECT IdSubServicio FROM Tb_SubServiciosAgentes WHERE @Fecha1 >= FechaAlta and Baja = 'S' and FechaBaja >= @Fecha1 and ServicioAgente = @Servicio) 

--IF exists (SELECT top 1 IdSubServicio from tb_SubServiciosAgentes where @Fecha1 > FechaAlta and Baja = 'S' and FechaBaja > @Fecha1 and ServicioAgente = @Servicio) 
BEGIN
IF @Fecha2 IS NULL 
	BEGIN
		---  Agregado - 29-10-2007
		
  		SELECT @SitLab=SituacionLaboral FROM Tb_SubServiciosAgentes WHERE @Fecha1 >= FechaAlta and Baja = 'S' and FechaBaja >= @Fecha1 and ServicioAgente = @Servicio
		IF @SitLab <> 5
			BEGIN 
				PRINT  'Error de superposicion'
				SELECT @cod = 3, @Diagnostico='*' + 'Error! La Licencia se superpone con un sub servicio ya dado de baja. Para INSERTar una licencia historica debe especIFicar una fecha de baja!'
				GOTO Salir
			END 
	END
IF @Fecha2 IS NOT NULL
	BEGIN
	DECLARE @FechaAlta DATETIME
	DECLARE @FechaBaja DATETIME
	SELECT @FechaAlta = FechaAlta, @FechaBaja=FechaBaja from tb_SubServiciosAgentes where idSubServicio = @Subservicio --La Fecha de Alta y Baja del SubServicio a rectIFicar
	DECLARE @FechaAltaSS DATETIME
	DECLARE @FechaBajaSS DATETIME
	DECLARE @sitext INT
	DECLARE @idss INT

	SELECT @sitlab=situacionlaboral, @sitext=situacionextraordinaria, @FechaBajaSS=FechaBaja, @FechaAltaSS=FechaAlta, @idss=idsubServicio from tb_SubServiciosAgentes where Servicioagente=@Servicio and dateadd(day,1,FechaBaja) = @FechaAlta

	IF @Fecha1 < @FechaAlta AND @sitlab <> 5 --AND @sitext <> 1
--ant      IF @Fecha1 < @FechaAlta AND @sitlab <> 5 AND @sitext <> 1

	BEGIN
		SELECT @cod=3, @Diagnostico='*'+'Error! La Fecha de Alta de la Rectificatoria cae dentro de un Sub Servicio que no es Normal. RectIFique el movimiento con Fecha de Alta: '+convert(VARCHAR, @FechaAltaSS)
		GOTO salir
	END

	SELECT @sitlab=situacionlaboral, @sitext=situacionextraordinaria, @FechaBajaSS=FechaBaja, @FechaAltaSS=FechaAlta, @idss=idsubServicio from tb_SubServiciosAgentes where Servicioagente=@Servicio and dateadd(day,-1,FechaAlta) = @FechaBaja

	IF @Fecha2 > @FechaBaja AND @sitlab <> 5-- AND @sitext <> 1
--ant	IF @Fecha2 > @FechaBaja AND @sitlab <> 5 AND @sitext <> 1

	BEGIN
		SELECT @cod=3, @Diagnostico='*'+'Error! La Fecha de Baja de la RectIFicatoria cae dentro de un Sub Servicio que no es Normal. RectIFique el movimiento con Fecha de Alta: '+convert(VARCHAR, @FechaAltaSS)
		GOTO salir
	END
END	
--UPDATE tb_PlazasDeMovimiento set estado = 3 where idCola = @idCola
END

/* CAMBIADO EL 11/07/2007
IF exists (SELECT top 1 IdSubServicio from tb_SubServiciosAgentes where @Fecha1 > FechaAlta and Baja = 'S' and FechaBaja > @Fecha1 and ServicioAgente = @Servicio) 
BEGIN
IF @Fecha2 is null
	BEGIN
	prINT 'Error de superposicion'
	SELECT @cod = 3, @Diagnostico='*' + 'Error! La Licencia se superpone con un sub servicio ya dado de baja. Para INSERTar una licencia historica debe especIFicar una fecha de baja!'
	goto salir
	END
IF @fecha2 is not null 
	BEGIN
	DECLARE @FechaAlta DATETIME
	DECLARE @FechaBaja DATETIME
	SELECT @FechaAlta = FechaAlta, @FechaBaja=FechaBaja from tb_SubServiciosAgentes where idSubServicio = @Subservicio --La Fecha de Alta y Baja del SubServicio a rectIFicar
	DECLARE @FechaAltas DATETIME
	DECLARE @FechaBajas DATETIME
	DECLARE @sitlab INT
	DECLARE @sitext INT
	DECLARE @idss INT

	SELECT @sitlab=situacionlaboral, @sitext=situacionextraordinaria, @FechaBaja=FechaBaja, @FechaAlta=FechaAlta, @idss=idsubServicio from tb_SubServiciosAgentes where Servicioagente=@Servicio and dateadd(day,1,FechaBaja) = @FechaAlta

	IF @Fecha1 < @FechaAlta AND @sitlab <> 5 AND @sitext <> 1
	BEGIN
		SELECT @cod=3, @Diagnostico='*'+'Error! La Fecha de Alta de la RectIFicatoria cae dentro de un Sub Servicio que no es Normal. RectIFique el movimiento con Fecha de Alta: '+convert(VARCHAR, @FechaAlta)
		GOTO salir
	END

	SELECT @sitlab=situacionlaboral, @sitext=situacionextraordinaria, @FechaBaja=FechaBaja, @FechaAlta=FechaAlta, @idss=idsubServicio from tb_SubServiciosAgentes where Servicioagente=@Servicio and dateadd(day,-1,FechaAlta) = @FechaBaja

	IF @Fecha2 > @FechaBaja AND @sitlab <> 5 AND @sitext <> 1
	BEGIN
		SELECT @cod=3, @Diagnostico='*'+'Error! La Fecha de Baja de la RectIFicatoria cae dentro de un Sub Servicio que no es Normal. RectIFique el movimiento con Fecha de Alta: '+convert(VARCHAR, @FechaAlta)
		GOTO salir
	END
END	
--UPDATE tb_PlazasDeMovimiento set estado = 3 where idCola = @idCola
END
--ELSE
--	UPDATE tb_PlazasDeMovimiento set estado = 2 where idCola = @idCola
*/

---SELECT @Error as error, @Diagnostico as Diagnostico

Salir:
-- En funcion del codigo (0,1,2) realizo un UPDATE en el estado de la cola y siempre retorno el diagnostico.
UPDATE tb_ColaDeMovimientos set estado = @cod, 
ChequeoEscuela = CASE WHEN @Modo = 2 THEN @Diagnostico ELSE ChequeoEscuela END
 where idCola = @idCola
SELECT @Estado = @cod
GO
